﻿using System;
using System.Windows.Input;
using System.Windows;
using System.Xml.Serialization;
using System.IO;
using Microsoft.Win32;
using System.Windows.Forms;


namespace Guitar
{
    public partial class MainWindow
    {

        /***************************************************************************************
         *                         COMMANDES DU MENU D'OPTION DU RUBBAN
         ***************************************************************************************/
        
     

            public static RoutedCommand NouveauCommand = new RoutedCommand();
            public static RoutedCommand OuvrirCommand = new RoutedCommand();
            public static RoutedCommand EnregistrerCommand = new RoutedCommand();
            public static RoutedCommand EnregistrerSousCommand = new RoutedCommand();
            public static RoutedCommand ImprimerCommand = new RoutedCommand();
            public static RoutedCommand OptionCommand = new RoutedCommand();
            public static RoutedCommand QuitterCommand = new RoutedCommand();



            // Enregistrer Fichier
            public void NouveauCommandCanExecute(Object sender, CanExecuteRoutedEventArgs e)
            {
                e.CanExecute = true;
            }


            public void NouveauCommandExecuted(Object target, ExecutedRoutedEventArgs e)
            {


                //Ouverture du document

                App.fichiersEnCours[App.PartitionEnCours] = "";
                App.Partitions[App.PartitionEnCours] = new Modele.Partition();


              //  ((MainWindow)App.Current.MainWindow).Conteneur.Refresh();

            }
            /// <summary>
            /// Détermine si la commande peut être exécutée ou non.
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            public void OptionCommandCanExecute(Object sender, CanExecuteRoutedEventArgs e)
            {
                e.CanExecute = true;
            }

            /// <summary>
            /// Exécute l'action.
            /// </summary>
            /// <param name="target"></param>
            /// <param name="e"></param>
            public void OptionCommandExecuted(Object target, ExecutedRoutedEventArgs e)
            {
                App.f1 = new OptionsWindow();
                App.f1.Show();

                ((MainWindow)App.Current.MainWindow).Menu.MainRibbon.IsEnabled = false;

            }


            // quitter l'appli
            public void QuitterCommandCanExecute(Object sender, CanExecuteRoutedEventArgs e)
            {
                e.CanExecute = true;
            }


            public void QuitterCommandExecuted(Object target, ExecutedRoutedEventArgs e)
            {
                System.Windows.Application.Current.Shutdown();
            }

            // ouvrir Fichier
            public void OuvrirCommandCanExecute(Object sender, CanExecuteRoutedEventArgs e)
            {
                e.CanExecute = true;
            }


            public void OuvrirCommandExecuted(Object target, ExecutedRoutedEventArgs e)
            {

                Microsoft.Win32.OpenFileDialog dlgOpen = new Microsoft.Win32.OpenFileDialog();


                // Filtre
                dlgOpen.DefaultExt = ".xml";
                dlgOpen.Filter = "xml documents (.xml)|*.xml";


                // Affichage de la boite de dialogue
                Nullable<bool> result = dlgOpen.ShowDialog();


                // On récupére le nom du fichier
                if (result == true) {
                    //Ouverture du document

                   
                   try {
                        // Désérialisation du fichier
                       // ((MainWindow)App.Current.MainWindow).StartChargement();
                     XmlSerializer mySerializer = new XmlSerializer(typeof(Modele.Partition));
                        FileStream myFileStream =
                        new FileStream(dlgOpen.FileName, FileMode.Open);
                        // A changer si gestion du multiOnglet
                        App.Partitions[App.PartitionEnCours].Dispose();
                        App.Partitions[App.PartitionEnCours] = null;
                        App.Partitions[App.PartitionEnCours] = (Modele.Partition)mySerializer.Deserialize(myFileStream);
                      
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("[EXCEPTION] :" + ex.Message);
                    }
                    finally
                    {

                        App.fichiersEnCours.Add(dlgOpen.FileName);
                        App.Pages[App.ModeleurEnCours].Remplir(App.PartitionEnCours, App.PisteEnCours);
                      //  ((MainWindow)App.Current.MainWindow).Conteneur.Refresh();
                        ((MainWindow)App.Current.MainWindow).Menu.Module_Manche.UpdateNote();
             
                    }                      
                }
            }

            // Enregistrer Fichier
            public void EnregistrerCommandCanExecute(Object sender, CanExecuteRoutedEventArgs e)
            {
                e.CanExecute = true;
            }


            public void EnregistrerCommandExecuted(Object target, ExecutedRoutedEventArgs e)
            {


                if (App.fichiersEnCours[App.PartitionEnCours].Length >= 1)
                {

                    
                    XmlSerializer xx = new XmlSerializer(typeof(Modele.Partition));
                    xx.Serialize(new StreamWriter(App.fichiersEnCours[App.PartitionEnCours]), App.Partitions[App.PartitionEnCours]);

                }
                else
                {
                    EnregistrerSousCommandExecuted(target, e);
                }

            }

            // Enregistrer Sous Fichier
            public void EnregistrerSousCommandCanExecute(Object sender, CanExecuteRoutedEventArgs e)
            {
                e.CanExecute = true;
            }


            public void EnregistrerSousCommandExecuted(Object target, ExecutedRoutedEventArgs e)
            {

                Microsoft.Win32.SaveFileDialog dlgSave = new Microsoft.Win32.SaveFileDialog();


                // Filtre

                dlgSave.DefaultExt = ".xml";
                dlgSave.Filter = "xml documents (.xml)|*.xml";



                // Affichage de la boite de dialogue
                Nullable<bool> result = dlgSave.ShowDialog();


                // On récupére le nom du fichier
                if (result == true)
                {

                    //Ouverture du document
                    App.fichiersEnCours[App.PartitionEnCours] = dlgSave.FileName;
                    XmlSerializer xx = new XmlSerializer(App.Partitions[App.PartitionEnCours].GetType());
                    xx.Serialize(new StreamWriter(dlgSave.FileName), App.Partitions[App.PartitionEnCours]);


                }
            }


            // Imprimer
            public void ImprimerCommandCanExecute(Object sender, CanExecuteRoutedEventArgs e)
            {
                e.CanExecute = true;
            }


            public void ImprimerCommandExecuted(Object target, ExecutedRoutedEventArgs e)
            {

                PrintDialog dlgSave = new PrintDialog();




                // Affichage de la boite de dialogue
                dlgSave.ShowDialog();


                /* On récupére le nom du fichier
                if (result == true)
                {

                


                }*/

            }

       // }

       // public static OptionC OptionCommands = new OptionC();
        
    }
}
